package org.huangrui.spark.java.core.rdd.operate.action;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;

/**
 * @Author hr
 * @Create 2024-10-18 9:47
 */
public class Spark03_Operate_Action_4 {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("spark");
        final JavaSparkContext jsc = new JavaSparkContext(conf);
        final List<Integer> nums = Arrays.asList(4, 2, 3, 1);
        final JavaRDD<Integer> rdd = jsc.parallelize(nums, 2);

        // 单点循环：1, 2, 3, 4
        rdd.collect().forEach(System.out::println);
        System.out.println("******************************");
        // 分布式循环
        // TODO foreach执行效率低，但是占内存比较小。
        rdd.foreach(
                num -> System.out.println(num)
        );

        System.out.println("**************************************");
        // TODO foreachPartition执行效率高，但是依托于内存大小。
        rdd.foreachPartition(
                list -> {
                    System.out.println(list);
                }
        );

        jsc.close();
    }
}
